﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Clases.Clases;
using Clases.ClasesPersistentes;
using Clases.Estructuras;
using Clases.Interface;
using System.Security.Cryptography;

namespace Clases.Gestores
{  
     public class GestorUsuario
    {

        public static void insertarUsuario(String pnombbre, String papellido1, String pApellido2, String pCedula, String ptelefono, String pnombreUsuario, String pcontrasenna, Rol prol)
        {
            try
            {
                String contrasennaEncriptada;
                Usuario tmpUsuario;
                tmpUsuario = new Usuario();
                tmpUsuario.nombre = pnombbre;
                tmpUsuario.apellido1 = papellido1;
                tmpUsuario.apellido2 = pApellido2;
                tmpUsuario.cedula = pCedula;
                tmpUsuario.telefono = ptelefono;
                tmpUsuario.nombreUsuario = pnombreUsuario;
                contrasennaEncriptada = encriptar(pcontrasenna);
                tmpUsuario.contrasenna = contrasennaEncriptada;
                tmpUsuario.rol = prol;
                DaoUsuario dao = new DaoUsuario();
                dao.insertarUsuario(tmpUsuario);
                GestorAccion.insertarAccion(StrAcciones.agregarUsuario, Properties.Settings.Default.nombreUsuario);
            }
            catch (Exception e)
            {
                throw e;
            }
        }

        public static void insertarEstudianteAGrupo(int pidEstudiante, int pidGrupo)
        {
            try
            {
                DaoUsuario dao = new DaoUsuario();
                dao.insertarEstudianteAGrupo(pidEstudiante, pidGrupo);
            }
            catch (Exception e) 
            {
                throw e;
            }
        }


        public static void modificarUsuario(int pidUsuario, String pnombre, String papellido1, String papellido2, String pCedula, String ptelefono, String pnombreUsuario, Rol prol)
        {
            try
            {
                Usuario tmpUsuario;
                tmpUsuario = new Usuario(pidUsuario, pnombre, papellido1, papellido2, pCedula, ptelefono, pnombreUsuario,prol);
                DaoUsuario dao = new DaoUsuario();
                dao.modificarUsuario(tmpUsuario);
                GestorAccion.insertarAccion(StrAcciones.modificarUsuario, Properties.Settings.Default.nombreUsuario);
            }
            catch (Exception e)
            {
                throw e;
            }
        }


        public static void modificarContrasena(int pidUsuario, String pconstrasenaNueva)
        {
            try
            {
                Usuario tmpUsuario = new Usuario();
                tmpUsuario.idUsuario = pidUsuario;
                tmpUsuario.contrasenna = encriptar(pconstrasenaNueva);
                DaoUsuario dao = new DaoUsuario();
                dao.modificarContrasena(tmpUsuario);
                GestorAccion.insertarAccion(StrAcciones.modificarUsuario, Properties.Settings.Default.nombreUsuario);
            }
            catch (Exception e)
            {
                throw e;
            }
            
        }

        public static List<StrUsuario> listarUsuarios()
        {
            try
            {
                DaoUsuario dao = new DaoUsuario();
                List<StrUsuario> lista;
                lista = dao.listarUsuario();
                return lista;
            }
            catch (Exception e)
            {
                throw e;
            }
        }

        public static List<StrUsuario> listarDirectoresAcademicos()
        {
            try
            {
                DaoUsuario dao = new DaoUsuario();
                List<StrUsuario> lista;
                lista = dao.listarDirectoresAcademicos();
                return lista;
            }
            catch (Exception e)
            {
                throw e;
            }
        }

        public static List<StrUsuario> listarProfesores()
        {
            try
            {
                DaoUsuario dao = new DaoUsuario();
                List<StrUsuario> lista;
                lista = dao.listarProfesores();
                return lista;
            }
            catch (Exception e)
            {
                throw e;
            }
        }

        public static List<StrUsuario> listarEstudiantes()
        {
            try
            {
                DaoUsuario dao = new DaoUsuario();
                List<StrUsuario> lista;
                lista = dao.listarEstudiantes();
                return lista;
            }
            catch (Exception e)
            {
                throw e;
            }
        }
            
         public static Usuario buscar(String pnombreUsuario){

             try
             {
                 DaoUsuario dao = new DaoUsuario();
                 Usuario resultado = dao.buscar(pnombreUsuario);
                 return resultado;

             }catch (Exception e)
            {
                throw e;
            }

         }

         public static List<StrUsuario> buscarCedula(String pcedula)
         {

             try
             {
                 DaoUsuario dao = new DaoUsuario();
                 List<StrUsuario> resultado = dao.buscarCedula(pcedula);
                 return resultado;

             }
             catch (Exception e)
             {
                 throw e;
             }
         }
        //public static IUIObject buscarUsuario(String pUsuario)
        //{
        //    try
        //    {
        //        DaoUsuario dao = new DaoUsuario();
        //        Usuario resultado = dao.buscar(pUsuario);
        //        return resultado;
        //    }
        //    catch (Exception e)
        //    {
        //        throw e;
        //    }
        //}
        private static string encriptar(string pcontrasenna)
        {
            SHA1CryptoServiceProvider elProveedor = new SHA1CryptoServiceProvider();
            byte[] vectoBytes = System.Text.Encoding.UTF8.GetBytes(pcontrasenna);
            byte[] inArray = elProveedor.ComputeHash(vectoBytes);
            elProveedor.Clear();
            return Convert.ToBase64String(inArray);
        }

        public static void  eliminarUsuario(String pnombre) {
            Usuario usuario = new Usuario();
            usuario = buscar(pnombre);
            DaoUsuario dao = new DaoUsuario();
            dao.eliminarUsuario(usuario);
        }
    }
}
